package main

import "fmt"

//输出必须用双引号，单引号会报错
func main() {
	/*
		   变量声明
		    1.声明变量必须使用
			2.只是声明变量默认都为0
			3.在同一个{}内，声明的变量是唯一的
	*/
	//var a int
	//a = 10
	//fmt.Println(a)
	//var c,b int
	//c,b =20,30
	//fmt.Println(c,b)
	////变量的初始化 声明变量时。同时赋值
	//var d int = 40
	//fmt.Println(d)
	////自动推导（常用）
	////去掉 var ，用: 让程序自动识别=后的值类型
	//e := 50
	//fmt.Println(e)
	////%T\n %T表示输出变量的数据类型 \n表示换行
	//i:=10
	//fmt.Printf("%T\n",i)
	/*
		多重赋值和匿名变量
	*/
	aa, bb := 10, 20
	aa, bb = bb, aa
	fmt.Println(aa, bb)
	// _（下划线）是个特殊的变量名，任何赋予它的值都会被丢弃：
	_, i, _, j := 1, 2, 3, 4
	fmt.Println(i, j)
	/*
		常量的定义
		1.常量就是程序运行期间，比可以更改的的量
		2.关键字 const
	*/
	//const cc int =10
	//const dd float64 =5.6
	//fmt.Println(cc,dd)
	//常量的自动推导
	//const cc = 10
	//const dd = 5.6
	//fmt.Println(cc,dd)
	//或者另一种表达式
	const (
		cc = 10
		dd = 5.6
	)
	fmt.Println(cc, dd)
	//iota枚举自动生成器，给每一行，自动加一
	//iota给常量赋值使用
	const (
		a = iota
		b = iota
		c = iota
	)
	fmt.Println(a, b, c)
	//iota,如果遇到const，那么他就会重置为0
	const d = iota
	fmt.Println(d)
	//可以只写一个iota，必须在一个括号里
	const (
		a1 = iota
		a2
		a3
	)
	fmt.Println(a1, a2, a3)

}
